package controlador;

import java.io.File;

import logica.Proyecto;
import logica.SinNombreException;

import vista.objetos.ProyectoGraficable;
import xml.XMLManager;

public class ControladorCrearProyecto {
	
	private static final String CARPETA_DATOS = File.separator + "Datos";
	
	public static ProyectoGraficable crearProyectoNuevo(String path, String nombreProyecto) throws SecurityException, CrearProyectoException, SinNombreException
	{
		crearEstructuraDeProyecto(path, nombreProyecto);
		
		XMLManager.getInstance().setPath(path + File.separator + nombreProyecto + CARPETA_DATOS + File.separator);

		return new ProyectoGraficable(new Proyecto(nombreProyecto));
	}
	
	public static ProyectoGraficable abrirProyectoExistente(String path) throws CrearProyectoException, SinNombreException
	{
		XMLManager.getInstance().setPath(path + CARPETA_DATOS + File.separator);

		return new ProyectoGraficable(new Proyecto(getNombreProyecto(path)));
	}
	
	private static void crearEstructuraDeProyecto(String path, String nombreProyecto) throws SecurityException, CrearProyectoException
	{
		if (verificarSiExisteDirectorio(path + File.separator + nombreProyecto))	
			throw new CrearProyectoException("Ya existe un directorio con ese nombre.");

		
		File carpeta = new File(path + File.separator + nombreProyecto + CARPETA_DATOS);
		
		if (carpeta.mkdirs() == false)
			throw new CrearProyectoException("Error al intentar crear la estructura de carpetas.");
	}

	private static boolean verificarSiExisteDirectorio(String path) throws CrearProyectoException
	{
		File dir = new File(path);

		return dir.isDirectory();
	}

	private static String getNombreProyecto(String pathProyecto) throws CrearProyectoException
	{	
		if (verificarSiExisteDirectorio(pathProyecto + CARPETA_DATOS ) == false)
			throw new CrearProyectoException("El directorio no corresponde a un proyecto.");		

		String[] aux = pathProyecto.split(File.separator);
		
		return aux[aux.length - 1];
	}
}